// 此模块：是发送请求相关的封装，
//        目前用的axios，如果改天不用axios了，只需要修改当前这个模块，其它模块不用修改
import axios from "axios";
import type { AxiosRequestConfig,AxiosResponse,RawAxiosRequestHeaders } from "axios";


// 1、创建一个axios实例,做全局配置,不会引起全局污染，
let service = axios.create({
    baseURL:"http://localhost:3000",
    timeout:60*1000
});


// 2、请求拦截器
service.interceptors.request.use((config:AxiosRequestConfig)=>{
    //1、 处理token
    // 从本地缓存中获取登录时保存的token
    let token = localStorage.getItem("token");

    if(token){        
        // 有可能config对象的header属性是undefined的，所以，要么断言，要么，用扩展的方式
        // (config.headers as RawAxiosRequestHeaders).token= token;

        // 把token携带在请求头。
        config.headers = {
            ...config.headers,
            token
        }        
    }

    // 2、显示loading。



    return config;
},(err:any)=>{
    console.log("请求出错：err",err);    
    return err;
});


// 3、响应拦截器
service.interceptors.response.use((res:AxiosResponse)=>{

    // 隐藏loading

    
    // 根据后端响应回来的状态，做统一的处理
    switch(res.data.code){
        case "10119":console.log("token无效");break;
    }

    return res;
},(err:any)=>{
    // 此处处理所有的错误信息
    // err.res.code
    if(err.res){
        switch(err.res.code){
            case "500":console.log("后端出错，500了");
        }
    }
});

export default service;
